#pragma once
#include <ostream>
#include <vector>

struct BarkerPair {
    BarkerPair(const std::vector<int>& x, const std::vector<int>& y);

    std::vector<int> x;                // 该巴克码偶的x
    std::vector<int> y;                // 该巴克码偶的y
    int len;                           // 该巴克码偶的长度
    std::vector<int> autocorrelation;  // 该巴克码偶的自相关函数
    int peak;      // 该巴克码偶的自相关函数的主峰
    bool isValid;  // 是否为一个合法的巴克码偶

    bool operator<(const BarkerPair& other) const;
};

std::ostream& operator<<(std::ostream& cout, const BarkerPair& val);

bool isBarkerPair(const std::vector<int>& autocorrelation);

std::vector<int> getAutocorrelation(const std::vector<int>& x,
                                    const std::vector<int>& y);